Attach packages

library(tidyverse)
library(janitor)
library(lubridate)
library(here)
library(paletteer)
library(tsibble)
library(fable)
library(fabletools)
library(feasts)
library(forecast)
library(sf)
library(tmap)
library(mapview)

Monthly US energy consumption (renewable)

us_renew <- read_csv(here("data", "renewables_cons_prod.csv")) %>% 
  clean_names()
renew_clean <- us_renew %>% 
  mutate(description = str_to_lower(description)) %>% 
  filter(str_detect(description, pattern = "consumption")) %>% 
  filter(!str_detect(description, pattern = "total")) #! is gonna do the opposite
renew_date <- renew_clean %>%
  mutate(yr_mo_day = lubridate :: parse_date_time(yyyymm, "ym")) %>%
  mutate(month_sep = yearmonth(yr_mo_day)) %>%
  mutate(value = as.numeric(value)) %>% 
  drop_na(month_sep, value)

# Make a version wher I have month and year in separate columns

renew_parsed <- renew_date %>% 
  mutate(month = month(yr_mo_day, label = TRUE)) %>% 
  mutate(year = year(yr_mo_day))

Look at it:

renew_gg <- ggplot(data = renew_date, aes(x = month_sep, y = value, group = description)) +
  geom_line(aes(color = description))

renew_gg

updating colors with paletteer palettes:

renew_gg +
  scale_color_paletteer_d("calecopal::figmtn")

Coerce renew_parsed to a tsibble

renew_ts <- as_tsibble(renew_parsed, key = description, index = month_sep)

Let’s look at our time series data in couple of different ways

renew_ts %>%  autoplot(value)

renew_ts %>%  gg_subseries(value)

renew_ts %>% gg_season(value)

ggplot(data = renew_parsed, aes(x = month, y = value, group = year))+
  geom_line(aes(color = year))+
  facet_wrap(~description,
             ncol = 1,
             scale = "free",
             strip.position = "right")

hydro_ts <- renew_ts %>% 
  filter(description == "hydroelectric power consumption")

hydro_ts %>% autoplot(value)

hydro_ts %>% gg_subseries(value)

hydro_ts %>% gg_season(value)

What if i want the quarterly average consumptions for hydro?

hydro_quarterly <- hydro_ts %>% 
  index_by(year_qu = ~(yearquarter(.))) %>% 
  summarise(avg_consumption = mean(value))
dcmp <- hydro_ts %>% 
  model(STL(value ~ season (window = 5))) #Lowest smoothing

components(dcmp) %>%  autoplot()

hist(components(dcmp)$remainder)

hydro_ts %>% 
  ACF (value) %>% 
  autoplot()

DANGER DANGER

hydro_model <- hydro_ts %>% 
  model(
    ARIMA(value)
  ) %>% 
  fabletools::forecast(h = "4 years")

hydro_model %>%  autoplot(filter(hydro_ts, year(month_sep) > 2010))